package xu.com.utils;

import lombok.Data;
import xu.com.enums.ResultEnum;

import java.io.Serializable;

/**
 *返回结果类统一封装
 */
@Data
public class ResultObject<T> implements Serializable {
    // 状态码
    private Integer code;
    // 消息
    private String message;
    // 数据对象
    private T data;
    /**
     * 成功，无返回数据
     * @return
     */
    public static ResultObject<Void> success() {
        ResultObject<Void> resultObject = new ResultObject<>();
        resultObject.setCode(ResultEnum.SUCCESS.getCode());
        resultObject.setMessage(ResultEnum.SUCCESS.getMessage());
        return resultObject;
    }

    /**
     * 成功，有返回数据
     * @return
     */
    public static <V> ResultObject<V> success(V data) {
        ResultObject<V> resultObject = new ResultObject<>();
        resultObject.setCode(ResultEnum.SUCCESS.getCode());
        resultObject.setMessage(ResultEnum.SUCCESS.getMessage());
        resultObject.setData(data);
        return resultObject;
    }

    /**
     * 失败，无返回数据
     * @return
     */
    public static ResultObject<Void> failure() {
        ResultObject<Void> resultObject = new ResultObject<>();
        resultObject.setCode(ResultEnum.FAILURE.getCode());
        resultObject.setMessage(ResultEnum.FAILURE.getMessage());
        return resultObject;
    }

    /**
     * 失败，无返回数据
     * @return
     */
    public static ResultObject<Void> failure(String message) {
        ResultObject<Void> resultObject = new ResultObject<>();
        resultObject.setCode(ResultEnum.FAILURE.getCode());
        resultObject.setMessage(message);
        return resultObject;
    }

    /**
     * 失败，使用自定义枚举
     * @return
     */
    public static ResultObject<Void> failure(ResultEnum resultEnum) {
        ResultObject<Void> resultObject = new ResultObject<>();
        resultObject.setCode(resultEnum.getCode());
        resultObject.setMessage(resultEnum.getMessage());
        return resultObject;
    }

}
